<?php

class UsersController extends AppController {

	public $components = array('Paginator');

	public $paginate = array(
		'limit' => 25,
		//'conditions' => array('status' => '1'),
		'order' => array('User.username' => 'asc' )
	);

	var $permissao = array(
		'*' => array('login','logout','add'),
		'cliente' => array('index', 'edit', 'password_edit'),
		'admin' => array('admin_index', 'admin_listar', 'delete', 'activate', 'add', 'admin_tornar_admin', 'admin_tornar_cliente')
	);

	public function login() {
		$this->layout = 'comprador';

		$this->setTitle('Autenticação');

		//if already logged-in, redirect
		if($this->Session->check('Auth.User')){
			$this->redirect(array('action' => 'index'));
		}
		// if we get the post information, try to authenticate
		if ($this->request->is('post')) {
			if ($this->Auth->login()) {
				$this->User->id = $this->Auth->user('id');
				$this->User->saveField('last_access', date('Y-m-d h:i:s'));
				$this->Session->setFlash(__('Bem-vindo, '. $this->Auth->user('nome')));
				if($this->Auth->user('role') == 'admin'){
					$this->redirect(array('admin' => true, 'controller' => 'users', 'action' => 'index'));
				} else {
					$this->redirect($this->Auth->redirectUrl());
				}
			} else {
				$this->Session->setFlash(__('Usuário ou senha invalido'), "erro");
			}
		}
	}

	public function logout() {
		$this->redirect($this->Auth->logout());
	}

	public function index() {
		$this->layout = 'comprador';
		$this->setTitle('Área do Usuário');
		$user = $this->Session->read('Auth.User');
		$this->loadModel('Compra');
		$compras = $this->Compra->find('all', array('conditions' => array('id_cliente' => $user['id']), 'order' => 'dt_compra DESC'));
		$this->set('compras', $compras);
	}

	public function admin_listar() {
		$this->setTitle('Usuários');
		$this->Paginator->settings = $this->paginate;
		$users = $this->Paginator->paginate('User');
		$this->set('users', $users);
	}

	public function admin_index() {
		$user = $this->Session->read('Auth.User');
		$this->loadModel('Produto');
		$produtos = $this->Produto->find('count');
		$usuarios = $this->User->find('count', array('conditions' => array('User.created >'=>$user['last_access'])));
		$compras = $this->User->Compra->find('count', array('conditions' => array('Compra.dt_compra >'=>$user['last_access'])));

		$this->set(compact('user', 'compras', 'usuarios', 'produtos'));
		$this->setTitle('Painel de Controle');
	}

	public function add() {
		$this->layout = 'comprador';
		$this->setTitle('Novo Cadastro');
		if ($this->request->is('post')) {

			$MailchimpSubscriber = ClassRegistry::init('Mailchimp.MailchimpSubscriber');
			$data = array();
			$data['email'] = $this->data['User']['email'];
			$data['source'] = 'newsletterForm';
			$options = array('doubleOptin' => false, 'updateExisting' => true);
			$response = $MailchimpSubscriber->subscribe($data, $options);

			$this->User->create();
			if ($this->User->save($this->request->data)) {
				$this->Session->setFlash(__('Usuário cadastrado com sucesso!'), "sucesso");
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('Usuário não pode ser cadastrado. Por favor, tente novamente.'), "erro");
			}
		}
	}

	public function edit() {
		$this->layout = 'comprador';
		$this->setTitle('Alterar Cadastro');

		$user = $this->Session->read('Auth.User');
		if(isset($user)){
			$id = $user['id'];
		} else {
			$this->Session->setFlash('Você não possui permissão para realizar essa ação.');
			$this->redirect(array('action'=>'index'));
		}

		$user = $this->User->findById($id);

		if ($this->request->is('post') || $this->request->is('put')) {
			$this->User->id = $id;
			$data = $this->request->data;
			$data['User']['role'] = $user['User']['role'];
			if ($this->User->save($data)) {
				$this->Session->setFlash(__('Usuário atualizado com sucesso'), "sucesso");
				$user = $this->User->read();
				unset($user['User']['password']);
				$this->Session->write('Auth.User', $user['User']);
				$this->redirect(array('action' => 'index'));
			}else{
				$this->Session->setFlash(__('Não foi possível atualizar.'), "erro");
			}
		}

		if (!$this->request->data) {
			$this->request->data = $user;
		}

		$this->set('estado', $user['User']['estado']);
		$this->set('cidade', $user['User']['cidade']);
	}

	public function password_edit(){
		$this->layout = 'comprador';

		$this->setTitle('Alterar Senha');

		if ($this->request->is('post') || $this->request->is('put')) {
			$user = $this->Session->read('Auth.User');
			if(!isset($user)){
				$this->Session->setFlash('Você não possui permissão para realizar essa ação.');
				$this->redirect(array('action'=>'index'));
			}
			$this->User->id = $user["id"];
			if ($this->User->save($this->request->data, true, array('id','password', 'password_update', 'password_confirm_update'))) {
				$this->Session->setFlash(__('Senha modificada com sucesso'), "sucesso");
				$this->redirect(array('action' => 'index'));
			} else{
				$this->Session->setFlash(__('Não foi possível modificar sua senha.'), "erro");
			}
		}
	}

	public function delete($id = null) {

		if (!$id) {
			$this->Session->setFlash('Please provide a user id');
			$this->redirect(array('action'=>'listar'));
		}

		$this->User->id = $id;
		if (!$this->User->exists()) {
			$this->Session->setFlash('Invalid user id provided');
			$this->redirect(array('action'=>'listar'));
		}
		if ($this->User->saveField('status', 0)) {
			$this->Session->setFlash(__('User deleted'));
			$this->redirect(array('action' => 'listar'));
		}
		$this->Session->setFlash(__('User was not deleted'));
		$this->redirect(array('action' => 'listar'));
	}

	public function activate($id = null) {
		if (!$id) {
			$this->Session->setFlash('Please provide a user id');
			$this->redirect(array('action'=>'listar'));
		}

		$this->User->id = $id;
		if (!$this->User->exists()) {
			$this->Session->setFlash('Invalid user id provided');
			$this->redirect(array('action'=>'listar'));
		}
		if ($this->User->saveField('status', 1)) {
			$this->Session->setFlash(__('Usuário reativado com sucesso!'), "sucesso");
			$this->redirect(array('action' => 'listar'));
		}
		$this->Session->setFlash(__('Usuário não reativado'), "erro");
		$this->redirect(array('action' => 'listar'));
	}

	public function admin_tornar_admin($user_id){
		$this->User->id = $user_id;
		if ($this->User->saveField('role', 'admin')) {
			$this->Session->setFlash(__('Administrador definido com sucesso!'), "sucesso");
			$this->redirect(array('action' => 'listar'));
		}
	}

	public function admin_tornar_cliente($user_id){
		$this->User->id = $user_id;
		if ($this->User->saveField('role', 'cliente')) {
			$this->Session->setFlash(__('Cliente definido com sucesso!'), "sucesso");
			$this->redirect(array('action' => 'listar'));
		}
	}
}

?>
